class Catalog < ActiveRecord::Base
  has_many :catalog_values
  
  validates_presence_of :name
  validates_uniqueness_of :name
  validates_numericality_of :parent_id, :allow_nil => true
  
  # agrega un nuevo item en los valores del catálogo
  # validando si existe el mismo alternate_value_id o el mismo nombre
  # devuelve true si se agrego, false en caso contrario
  def add_value(alternate_value_id, name, is_active=true, parent_value_id=nil)
    
    unless !catalog_values.find_by_name(name).nil? ||
        !catalog_values.find_by_alternate_value_id(alternate_value_id).nil?
      catalog_values << CatalogValue.new(:alternate_value_id => alternate_value_id,
        :name => name, :is_active => is_active, :parent_value_id => parent_value_id)
      true
    else
      false
    end
    
  end
  
  # devuelve todos los valores activos asociados a un catálogo
  def active_values
    catalog_values.find(:all, :conditions => {:is_active => true})
  end
  
  # devuelve el valor de un elemento del catálogo identificado por el id
  # si el id no existe, devuelve una cadena vacía
  def get_value(id)
    unless id.nil?
      value_found = catalog_values.find_by_alternate_value_id(id)
      
      unless value_found.nil?
        value_found.name
      else
        logger.warn "id: #{id} doesn't exist in catalog #{self.name}"
        ""
      end
    else
      logger.error "No id passed."
      ""
    end
  end
  
  def get_id_from_value(value)
    unless value.nil?
      value_found = catalog_values.find_by_name(value)
      
      value_found.alternate_value_id unless value_found.nil?
    end
  end
  
  def all_values
    self.catalog_values.find(:all)
    
  end
end
